Skip to main content

API Key External API (/api/ext)

Documentation for external endpoints protected with API Key.

Authentication​

All endpoints in this document use:

Authorization: X-API-Key YOUR_API_KEY
Content-Type: application/json

Base URL:

https://api-staging.minotaursales.io/api/ext

Example:

curl --location '{API_GATEWAY_URL}/api/ext/contacts/list' \
--header 'Authorization: X-API-Key YOUR_API_KEY' \
--header 'Content-Type: application/json' \
--data '{}'

Common Response Formats​

DefaultResponse​

Many create/update/delete endpoints respond with:

{
"success": true,
"data": {},
"message": "Operation completed"
}

PaginateResponse<T>​

{
"data": [],
"pagination": {
"total_records": 0,
"current_page": 1,
"total_pages": 1
}
}

Contacts (/contacts)​

POST /contacts/list (contacts:read)​

Request (minimum example):

{
"filters": {},
"paginate": {
"page": 1,
"limit": 25
}
}

Response 200 (ContactsResponse[]):

[
{
"id": "7b9c3df7-0eb5-4be2-af74-7e48d4b43b9c",
"first_name": "Ana",
"middle_name": null,
"last_name": "Perez",
"gender": null,
"birth_year": null,
"linkedin_url": null,
"facebook_url": null,
"twitter_url": null,
"work_email": "ana@example.com",
"personal_email": null,
"other_emails": null,
"industry": "Software",
"job_title": "Engineer",
"location_locality": "Bogota",
"location_country": "CO",
"location_region": "Cundinamarca",
"location_postal_code": null,
"phone_numbers": [],
"company": "Acme",
"mobile_phone": null,
"score": 87,
"verification_status": "verified",
"last_verified": "2026-04-01T10:30:00.000Z",
"custom_fields": {}
}
]

POST /contacts/metadata (contacts:read)​

Request:

{
"filters": {},
"paginate": {
"page": 1,
"limit": 25
}
}

Response 200 (ContactMetadataResponse):

{
"pagination": {
"current_page": 1,
"total_records": 1,
"total_pages": 1
}
}

POST /contacts (contacts:create)​

Required fields for create:

  • first_name
  • last_name
  • work_email
  • phone_numbers (can be empty array)

Request:

{
"first_name": "Ana",
"last_name": "Perez",
"work_email": "ana@example.com",
"phone_numbers": [],
"job_title": "Engineer",
"company": "Acme"
}

Response 200 (DefaultResponse):

{
"success": true,
"data": {
"id": "7b9c3df7-0eb5-4be2-af74-7e48d4b43b9c"
},
"message": "Contact created"
}

GET /contacts/:id (contacts:read)​

Response 200 (ContactsResponse):

{
"id": "7b9c3df7-0eb5-4be2-af74-7e48d4b43b9c",
"first_name": "Ana",
"middle_name": null,
"last_name": "Perez",
"work_email": "ana@example.com",
"industry": "Software",
"job_title": "Engineer",
"location_locality": "Bogota",
"location_country": "CO",
"score": 87,
"verification_status": "verified",
"last_verified": "2026-04-01T10:30:00.000Z",
"custom_fields": {}
}

PATCH /contacts/:id (contacts:update)​

Request:

{
"job_title": "Senior Engineer",
"phone_numbers": ["+573001234567"]
}

Response 200 (DefaultResponse):

{
"success": true,
"data": {},
"message": "Contact updated"
}

DELETE /contacts/:id (contacts:delete)​

Response 200 (DefaultResponse):

{
"success": true,
"data": {},
"message": "Contact deleted"
}

Companies (/company)​

POST /company/list (companies:read)​

Request:

{
"filters": {},
"paginate": { "page": 1, "limit": 25 }
}

Response 200 (CompaniesResponse[]):

[
{
"id": "30ea8d4e-6b76-4f8f-bcf8-a1cc5af13b4b",
"company_name": "Acme Inc",
"size": "51-200",
"industry": "Software",
"location_locality": "Bogota",
"location_country": "CO",
"verification_status": "verified",
"score": 80,
"custom_fields": {}
}
]

POST /company (companies:create)​

Required fields:

  • type
  • company_name

Request:

{
"type": "company",
"company_name": "Acme Inc",
"industry": "Software"
}

Response 200 (DefaultResponse):

{
"success": true,
"data": { "id": "30ea8d4e-6b76-4f8f-bcf8-a1cc5af13b4b" },
"message": "Company created"
}

PATCH /company/:id (companies:update)​

Request:

{
"industry": "SaaS",
"location_country": "CO"
}

Response 200 (DefaultResponse):

{
"success": true,
"data": {},
"message": "Company updated"
}

DELETE /company/:id (companies:delete)​

Response 200 (DefaultResponse):

{
"success": true,
"data": {},
"message": "Company deleted"
}

Lists (/list-contact)​

POST /list-contact (list_contacts:create)​

Request:

{
"name": "Prospects Latam",
"description": "Initial list",
"rules": [
{
"field": "location_country",
"operator": "contains",
"value": "CO"
}
]
}

Response 200 (CreateListContactResponse):

{
"id": "9f720ce2-f5d1-4ef4-a0c8-3399f68d386d",
"name": "Prospects Latam"
}

PATCH /list-contact/:id (list_contacts:update)​

Request:

{
"name": "Prospects Latam v2",
"description": "Updated list"
}

DELETE /list-contact/:id (list_contacts:delete)​

Response 200 (DefaultResponse):

{
"success": true,
"data": {},
"message": "List deleted"
}

POST /list-contact/duplicate (list_contacts:read)​

Request:

{
"list_id": "9f720ce2-f5d1-4ef4-a0c8-3399f68d386d",
"new_name": "Prospects Latam Copy"
}

POST /list-contact/verify-contacts/:id (list_contacts:read)​

Request: no body.

Response 200 (DefaultResponse):

{
"success": true,
"data": {},
"message": "Verification started"
}

Prospect (/prospect)​

POST /prospect/filters (prospect:read)​

Request:

{
"source": "job_title",
"search": "engineer"
}

Response 200 (list of suggested values):

[
{
"type": "job_title",
"value": "Software Engineer"
}
]

POST /prospect/list (prospect:read)​

Request:

{
"filters": {},
"paginate": { "page": 1, "limit": 25 },
"all_contacts": false
}

Service Handler (/service-handler)​

POST /service-handler/unlock-contacts (payment_prospect:create)​

Request:

{
"filters": {},
"order_by": { "score": "DESC" },
"total_records": 100,
"sync_hubspot": false
}

Response 200:

{
"id": "7ec0d9c6-cab6-46cf-8d5a-b5f22f17f6da",
"status": "PENDING"
}

POST /service-handler/unlock-selected-contacts (payment_prospect:create)​

Request:

{
"ids": [
"7b9c3df7-0eb5-4be2-af74-7e48d4b43b9c",
"a96f2d7f-743f-4747-9198-7ca35ccab774"
],
"sync_hubspot": false
}

POST /service-handler/verify-email (verify_email:create)​

Request:

{
"emails": [
{
"email": "ana@example.com",
"contact_id": "7b9c3df7-0eb5-4be2-af74-7e48d4b43b9c"
}
],
"sync_hubspot": false
}

Common Errors​

401 Unauthorized​

When the Authorization header is missing or invalid:

{
"statusCode": 401,
"message": "The provided API key is invalid or unauthorized."
}

400 Bad Request​

When the body fails validations (required fields, invalid UUID, incorrect types).